home *** CD-ROM | disk | FTP | other *** search
-
- /* SP_MemSubs.c
- - Memory Management Routines for SPObject-Support -
- (c) 1990-94 by Andreas R. Kleinert
- Last changes : 25.02.1994
- */
-
- #include "spobject.h"
-
- /* Memory-Support-Functions */
-
- struct AIM_MemList * __saveds __stdargs AIM_GetMemList(void);
- void __saveds __stdargs AIM_FreeMemList(struct AIM_MemList *MemList);
- long __saveds __stdargs AIM_AddMemEntry(struct AIM_MemList *mlist, APTR pointer, long size);
- APTR __saveds __stdargs AIM_AllocMemEntry(struct AIM_MemList *mlist, ULONG size, ULONG type);
-
-
- struct AIM_MemList * __saveds __stdargs AIM_GetMemList(void)
- {
- struct AIM_MemList *MemList = N;
- struct List *samelist = N;
-
- samelist = (struct List *) AllocVec(sizeof(struct AIM_MemList), MEMF_CLEAR);
- if(samelist)
- {
- MemList = (APTR) samelist;
-
- MemList->ml_NumEntries = 0;
-
- samelist->lh_Head = (struct Node *) &(samelist->lh_Tail);
- samelist->lh_Tail = N;
- samelist->lh_TailPred = (struct Node *) &(samelist->lh_Head);
- samelist->lh_Type = NT_UNKNOWN;
- }else return(NULL);
-
- return(MemList);
- }
-
- void __saveds __stdargs AIM_FreeMemList(struct AIM_MemList *MemList)
- {
- struct AIM_MemEntry *entry;
-
- if(MemList)
- {
- for(entry=(APTR) MemList->ml_EntryList.lh_Head;(entry)&&(entry!=(APTR) &(MemList->ml_EntryList.lh_Tail));)
- {
- Remove((APTR) entry);
- FreeVec(entry->MemPointer);
- FreeVec(entry);
- entry = (APTR) MemList->ml_EntryList.lh_Head;
- }
-
- FreeVec(MemList);
- }
- }
-
- long __saveds __stdargs AIM_AddMemEntry(struct AIM_MemList *mlist, APTR pointer, long size)
- {
- struct AIM_MemEntry *entry;
-
- if(!mlist || !pointer || !size) return(FALSE);
-
- entry = (APTR) AllocVec(sizeof(struct AIM_MemEntry), (MEMF_CLEAR|MEMF_PUBLIC));
- if(!entry)
- {
- FreeVec(pointer);
- return(FALSE);
- }
-
- mlist->ml_NumEntries++;
-
- entry->MemPointer = pointer;
-
- AddHead((APTR)mlist, (APTR)entry);
-
- return(TRUE);
- }
-
- APTR __saveds __stdargs AIM_AllocMemEntry(struct AIM_MemList *mlist, ULONG size, ULONG type)
- {
- APTR alloc;
-
- alloc = AllocVec(size, type);
- if(!alloc) return(N);
-
- if(!AIM_AddMemEntry(mlist, alloc, size)) return(N);
-
- return(alloc);
- }
-